blob: 30f356628a51b1c4f0365db05e7a7bcfaf260236 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#include "token.h"
#include "number.h"
#include <bu/formatter.h>
#include <bu/string.h>
Token::Token() :
eType( tUninitialized ),
sVal( 0 )
{
}
Token::Token( Type eType ) :
eType( eType ),
sVal( 0 )
{
}
Token::Token( Type eType, Bu::String *s ) :
eType( eType ),
sVal( s )
{
}
Token::Token( Type eType, Number *n ) :
eType( eType ),
nVal( n )
{
}
Token::Token( const Token &rSrc ) :
eType( rSrc.eType ),
sVal( rSrc.sVal )
{
Token &rMod = const_cast<Token &>(rSrc);
rMod.sVal = 0;
}
Token::~Token()
{
switch( eType )
{
case tNumber:
delete nVal;
break;
case tVariable:
case tCommand:
case tString:
delete sVal;
break;
default:
break;
}
}
Bu::Formatter &operator<<( Bu::Formatter &f, Token::Type eType )
{
switch( eType )
{
case Token::tNumber: return f << "num";
case Token::tVariable: return f << "var";
case Token::tCommand: return f << "cmd";
case Token::tPlus: return f << "+";
case Token::tMinus: return f << "-";
case Token::tDivide: return f << "/";
case Token::tMultiply: return f << "*";
case Token::tModulus: return f << "%";
case Token::tOpenParen: return f << "(";
case Token::tCloseParen: return f << ")";
case Token::tEquals: return f << "=";
case Token::tString: return f << "str";
case Token::tEndOfLine: return f << "eol";
case Token::tEndOfInput: return f << "eoi";
default: return f << "???";
}
}
|